home *** CD-ROM | disk | FTP | other *** search
/ The X-Philes (2nd Revision) / The X-Philes Number 1 (1995).iso / xphiles / hp48hor2 / uitl.doc < prev    next >
Text File  |  1995-03-31  |  31KB  |  1,099 lines

  1. (Files.hp48) 
  2. Item: 106 by akcs.softcalc@hpcvbbs.cv.hp.com [brian maguire] 
  3. Subj: UITL.LIB - user interface toolkit 
  4. Date: 17 Dec 1992 
  5.  
  6. Here's a user interface toolkit that I wrote close to 2 years  
  7. ago.  This library deals heavily with the user interface,  
  8. which is comprised of the display, keyboard, and beeper.  It  
  9. was written before HP released their development tools, when I  
  10. was still learning the internals of the 48, so some of the  
  11. commands may not be up to par.  Still, most of the commands  
  12. perform powerful functions that are missing from the 48's  
  13. built-in command set. 
  14.   
  15. I originally planned on releasing this library as part of a  
  16. commercial software package containing various toolkits, but  
  17. decided not to because of the poor market for toolkit  
  18. libraries.  Instead, I'm releasing this library in the public  
  19. domain.  It may be used and copied freely as long as it is  
  20. NOT used commercially or as part of a third party software  
  21. package without prior written permission by the author.  Nor  
  22. may the user be charge for this library beyond the cost of  
  23. reproduction. 
  24.   
  25. Remember, this is still my code, and I retain all rights to  
  26. it.  If you would like to use portions of this library for any  
  27. application that is sold commercially or posted to the public  
  28. you MUST get my permission.  I'm a pretty easy going guy and I  
  29. do n't mind other people using my code, but I would like to  
  30. know when portions of it get used, so please send me e-mail to  
  31. the fact (this is not an option!). 
  32.   
  33. This software is presented as is, without warrantee of any  
  34. kind.  The user bears all risk.  To the best of my knowledge,  
  35. this code will work correctly on ROM versions A-J.  Because  
  36. this code was written before HP release their development  
  37. tools, it m ay contain unfrozen entry points that may or may  
  38. not cause the 48 to crash on future ROM versions. 
  39.   
  40. If you have questions about ROM version compatibility or you  
  41. have problems/questions about any of the included commands,  
  42. feel free to contact me. 
  43.   
  44.  
  45. UITL : User interface tool library 
  46.  
  47. Copyright 1991 Brian J. Maguire 
  48. All Rights Reserved 
  49.  
  50.  
  51. The UITL library and this manual are presented as is, without 
  52. warrantee, express or implied.  Neither the software nor manual 
  53. may be copied, stored in a retrieval device, or used commercially 
  54. without written permission of the author.  The user is granted 
  55. limited use of this software for evaluation purposes only. 
  56. Second parties may not have access to this software package.  The 
  57. author retains the right to revoke the software package at any 
  58. time unless otherwise stated.  Acceptance of this package 
  59. constitutes agreement of these terms. 
  60. A basic understanding of the 48 is expected by the user. 
  61.  
  62. Please forward comments or questions to... 
  63.  
  64. Brian Maguire 
  65. 139 Kingsbury 
  66. Dearborn, MI 48128 
  67. (313) 274-0428 
  68.  
  69.  
  70.  
  71. 1.  PIXEL LOCATIONS 
  72.  
  73. Currently, the 48 uses two different graphic pointer.  A complex 
  74. number specifies a pixel location as defined by PPAR while a list 
  75. of two binary integers specifies a horizontal and vertical 
  76. distance from the top corner. 
  77.  
  78. A new type of pixel location pointer is used in this library.  A 
  79. single binary integer is used to specify both the horizontal and 
  80. vertical distance from the top left corner.  The right most five 
  81. nibbles specifies the vertical distance from the left side while 
  82. next five nibbles defines the distance from the top.  For 
  83. example, the list { #12345h #67890h } and the single binary 
  84. integer #1234567890h define the same pixel.  As another example, 
  85. the diagram shown below shows a 15 * 3 grob.  The pixel list 
  86. representing the marked pixel is { # 9h, # 2h }.  The same pixel 
  87. is also represented by single binary integer # 900002h. 
  88.  
  89.  
  90.        ********************************************** 
  91.        *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  * 
  92.        *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  * 
  93.        ********************************************** 
  94.        *  *  *  *  *  *  *  *  *XX*  *  *  *  *  *  * 
  95.        *  *  *  *  *  *  *  *  *XX*  *  *  *  *  *  * 
  96.        ********************************************** 
  97.        *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  * 
  98.        *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  * 
  99.        ********************************************** 
  100.  
  101.  
  102. NOTE: In order to read a binary integer used in graphic 
  103. operations your 48 should be set to HEX mode.  Likewise, your 
  104. wordsize should be set to at least 40 bits to avoid loosing data. 
  105.  
  106.  
  107.  
  108. 2.  BANG OPERATIONS 
  109. This library contains commands that perform "bang" operations on 
  110. graphics.  Unlike most 48 commands, which return a new object, a 
  111. bang type operation directly alters an object in memory. 
  112. Therefore, an bang operation cannot be undone with the UNDO or 
  113. LAST operations.  Likewise, all pointers that referenced the 
  114. original objects will point to the altered object.  All library 
  115. commands that perform bang operations end with the "" character. 
  116. If this character does not appear in the font used by you 
  117. computer it is an upside-down "!".  This character can be typed 
  118. into the 48 by pressing [Right-Shift] [DEL] while the alpha shift 
  119. is on. 
  120.  
  121. As an example of a bang type operation, if a grob is stored in 
  122. 'G1', recalled to the stack, and used as a target grob by a bang 
  123. type command, the grob in 'G1' is directly altered.  As another 
  124. example, the program << LCDGROB { #5h #5h } { #20h #20h } GNEG 
  125. >> recalls the LCD graphic object and negates a square section. 
  126.  
  127. Because they do not create a new copy of a target object, bang 
  128. operations can save considerable time.  They also conserve memory 
  129. since only one copy of the target object needs to exist in 
  130. memory.  In addition, they allow direct manipulation of the LCD, 
  131. PICT, and MENU grobs (see the library commands LCDGROB, PICTGROB 
  132. and MNUGROB). 
  133.  
  134.  
  135.  
  136. 3.  DISPLAY GROBS 
  137.  
  138. The 48 uses three GROBs to store display information.  The first 
  139. grob is used to display the stack and status area.  It is 
  140. normally 131 * 56 pixel, but can be resized to any dimensions. 
  141. The library command LCDGROB returns the actual LCD grob (not a 
  142. copy). 
  143.  
  144. The second grob contains the menu information and is normally 
  145. displayed on the bottom 8 pixels of the display screen.  The menu 
  146. grob is normally 131 * 8 pixel, but can be resized to any 
  147. dimension.  The library command MNUGROB returns the actual menu 
  148. grob. The built-in command LCD-> returns a copy of both the 
  149. status/stack and menu GROBs overlaid on a 131 * 64 grob. 
  150.  
  151. The final display grob is PICT.  It is used for graphing and can 
  152. be dimensioned to any size.  The library command PICTGROB returns 
  153. the actual PICT grob. 
  154.  
  155. When any on the three display GROBs are recalled to the stack 
  156. using the appropriate library command and used as a target grob 
  157. by a bang command the display grob is directly altered. 
  158.  
  159. When using the LCD grob and a target for a bang type graphic 
  160. command only the top 56 pixel can be manipulated.  If you want to 
  161. display graphic information on the lower 8 pixels without 
  162. altering the menu grob you can resize the LCD grob using the 
  163. library command LDIM64 and turn the menu display off using the 
  164. command MOFF. 
  165.  
  166.  
  167.  
  168. 4.  LIBRARY COMMANDS 
  169.  
  170.  
  171.  
  172. ABOUTUI 
  173. Info screen 
  174.  
  175.  
  176. ALMCAT 
  177. Programmable alarm catalog 
  178.  
  179.  
  180.  
  181. ALRT? 
  182. Returns alert message (low battery, etc.) and 1 or 0 
  183.  
  184.  
  185.      -> String 1 
  186.      -> 0 
  187.  
  188.  
  189.  
  190. BDKYBP 
  191. If the beeper is turned on BDKYBP will beep.  Otherwise, the 
  192. display flashes. 
  193.  
  194. Flag -56 set     ->   Screen flashes 
  195. Flag -56 clear   ->   Bad key Beep 
  196.  
  197.  
  198.  
  199. BORDR 
  200. If the input object is a grob, BORDR draws a box around the 
  201. graphic by expanding it by one pixel on the top, bottom, left, 
  202. and right and drawing a box.  If the real number (n) is on level 
  203. one, the object on level two is converted to a grob using the 
  204. font size(n) and centered in a box. 
  205.  
  206. Graphic   ->   Graphic 
  207. Any, Real(n)   ->   Graphic 
  208.  
  209.  
  210.  
  211. BZYTGL 
  212. If 0 is on level one the busy annunciator is turned off.  Any 
  213. other real number will turn the annunciator on. 
  214.  
  215. Real(0 or not 0)  ->  Busy annunciator is turned on or off 
  216.  
  217.  
  218.  
  219. B->PX 
  220. Converts binary pixel location into a pixel list. 
  221.  
  222. Binary   ->   List 
  223.  
  224.  
  225.  
  226. äCAT 
  227. Programmable STAT catalog. 
  228.  
  229.  
  230.  
  231. CMD? 
  232. Returns 1 if last command is on, otherwise 0 is returned. 
  233.  
  234. Last command flag   ->  Real(1 or 0) 
  235.  
  236.  
  237.  
  238. CMDSET 
  239. If 0 is on level one, last command is turned on.  Any other real 
  240. number turns last command off. 
  241.  
  242. Real(0 or not 0)   ->   Last command flag changed 
  243.  
  244.  
  245.  
  246. CMLBL 
  247. Converts the object on level one into a circular menu label grob. 
  248. This is a new style menu label.  See SMENU. 
  249.  
  250. Any   ->   Graphic 
  251.  
  252.  
  253.  
  254. CTRGROB 
  255. If two reals are on levels one and two, the object on level three 
  256. is converted into a grob and centered.  The real on level two is 
  257. used as the font size while the real on level one specifys the 
  258. grob's width. 
  259.  
  260. If a grob is on levels three and one, and a pixel location is on 
  261. level two, the grob from level one is centered on the grob from 
  262. level three using the location from level two as the center 
  263. position. 
  264.  
  265. Any, Real(font), Real(width)   ->   Graphic 
  266. Graphic, point, Graphic   ->   Graphic 
  267.  
  268.  
  269.  
  270. DEFKEYS 
  271. Redefines the keyboard.  The new keyboard definition continues 
  272. until [ON] is pressed or flag 9 is set.  Upon exiting the 
  273. redefine keyboard the exit key and menu row are returned to 
  274. levels two and one respectively.  The DEFKEYS parameters are as 
  275. follows. 
  276.  
  277.  
  278. 5: Menu list 
  279. 4: Keyboard definition list 
  280. 3: Valid key object 
  281. 2: Invalid key object 
  282. 1: { Menu key toggle flag, Special menu flag } 
  283.  
  284.  
  285.   A) Menu list 
  286.  
  287. The menu list is any standard menu key list or a special menu key 
  288. list (see SMENU).  If it is a special menu list then the menu 
  289. flag in the list on level one must be 1.  Shifted key definitions 
  290. are not acceptable in the DEFKEYS menu list.  If you want to 
  291. assign a shifted menu key you must do so in the keyboard 
  292. definition list. 
  293.  
  294.   B) Keyboard definition list 
  295.  
  296. This list must contain (key assignment, keycode) pairs.  A key 
  297. assignment can be any object, but should be a program or global 
  298. name.  A keycode is the standard HP keycode where a key is 
  299. represented by its row, column, and shift plane.  Alpha shifted 
  300. keys cannot be defined.  If the list is empty only the default 
  301. keys are defined.  They are [RIGHT SHIFT], [LEFT SHIFT], [NXT], 
  302. [ON], and the menu keys. 
  303.  
  304.   C) Valid key object 
  305.  
  306. An object, such as a program or global name, can be defined as a 
  307. valid key object.  This object will be executed only after a 
  308. valid key is pressed.  Any object other than a program, global 
  309. name, or local name will be ignored. 
  310.  
  311.   D) Invalid key object 
  312.  
  313. An object, such as a program or global name, can be defined as an 
  314. invalid key object.  This object will be executed only after an 
  315. invalid key is pressed.  If the object is not a program, global 
  316. name, or local name, it will be ignored and the 48 will beep when 
  317. an invalid key is pressed. 
  318.  
  319.   E) Key toggle flag 
  320.  
  321. If the key toggle flag is a nonzero number, a menu label will 
  322. flash when its associated key is pressed. 
  323.  
  324. Special menu flag 
  325.  
  326. If the special menu flag is a nonzero real number, the menu list 
  327. on level five is used to create a special menu using the SMENU 
  328. library command.  Otherwise, the menu list is used to create a 
  329. standard custom menu. 
  330.  
  331. list, list, obj, obj, list  ->  real, real 
  332.  
  333.  
  334. DISP1 
  335. Displays the object on level two using the small font size.  The 
  336. real number from level one specifies the row number(1-9). 
  337.  
  338. Any, Real   ->   Object from level two is displayed 
  339.  
  340.  
  341.  
  342. DISP3 
  343. Displays the object from level two on the stack display using the 
  344. large font size.  The real number from level one specifies the 
  345. stack level the object is displayed on. 
  346.  
  347. Any, Real   ->   Object from level two is displayed 
  348.  
  349.  
  350.  
  351. DMLBL 
  352. Converts the object on level one into a directory stype menu 
  353. label grob(normal menu label with bar on top). 
  354.  
  355. Any   ->   Graphic 
  356.  
  357.  
  358.  
  359. EQCAT 
  360. Programmable equation catalog command 
  361.  
  362.  
  363.  
  364. EQWRTR 
  365. Programmable command that edits an algebraic using the equation 
  366. writer application.  If [ON] is used to exit the application, the 
  367. original expression is returned on level two and 0 is returned to 
  368. level one.  If [ENTER] is used to exit, the edited expression is 
  369. returned to level two an 1 is returned to level one. 
  370. Algebraic   ->   Algebraic' 1 
  371. Algebraic   ->   Algebraic  0 
  372.  
  373.  
  374.  
  375. ERRMSSG 
  376. Returns the error message string for the error number input on 
  377. level one. 
  378.  
  379. Binary   ->   String 
  380. Real   ->   String 
  381.  
  382.  
  383.  
  384. FLIP 
  385. The grob on level one is rotated 180 degrees 
  386.  
  387. Graphic   ->   Graphic 
  388.  
  389.  
  390.  
  391. FREEZE? 
  392. Returns real number 0 through 7 specifying the FREEZE display 
  393. status.  See FREEZE in the owner's manual. 
  394.  
  395. Freeze display status   ->   Real(0-7) 
  396.  
  397.  
  398.  
  399. FTGL 
  400. Toggles flag state 
  401.  
  402. Real(flag)  ->  Flag state is toggled 
  403.  
  404.  
  405.  
  406. GAND 
  407. Graphic AND operator.  The grob from level one is ANDed with the 
  408. grob from level three starting at the position on level two. 
  409. Operates similar to the built-in command GOR. 
  410.  
  411. Graphic, List, Graphic  ->  Graphic 
  412. Graphic, Complex, Graphic  ->  Graphic 
  413. Graphic, Binary, Graphic  ->  Graphic 
  414.  
  415.  
  416.  
  417. GDEL 
  418. Deletes section of grob.  The pixel locations on levels two and 
  419. one specify the area to delete. 
  420.  
  421. NOTE: This is a bang operation. 
  422.  
  423. Graphic, List, List  ->  Graphic 
  424. Graphic, Complex, Complex  ->  Graphic 
  425. Graphic, Binary, Binary  ->  Graphic 
  426.  
  427.  
  428.  
  429.  
  430. GETKEY 
  431. Waits for key stroke and returns the key number and shift number. 
  432. Keys are consecutively numbered from 1 to 49, starting with the 
  433. top left corner and advancing from left to right, top to bottom. 
  434.  
  435.           ******************************* 
  436.           *  1 *  2 *  3 *  4 *  5 *  6 * 
  437.           ******************************* 
  438.           *  7 *  8 *  9 * 10 * 11 * 12 * 
  439.           ******************************* 
  440.           * 13 * 14 * 15 * 16 * 17 * 18 * 
  441.           ******************************* 
  442.           * 19 * 20 * 21 * 22 * 23 * 24 * 
  443.           ******************************* 
  444.           *   25    * 26 * 27 * 28 * 29 * 
  445.           ******************************* 
  446.           *  30 *  31 *  32 *  33 *  34 * 
  447.           ******************************* 
  448.           *  35 *  36 *  37 *  38 *  39 * 
  449.           ******************************* 
  450.           *  40 *  41 *  42 *  43 *  44 * 
  451.           ******************************* 
  452.           *  45 *  46 *  47 *  48 *  49 * 
  453.           ******************************* 
  454.              Sequential key numbers 
  455.  
  456.  
  457. Keyboard  ->  Real(key, 1-49), Real(shift, 0-6) 
  458.  
  459.  
  460.  
  461. GKEEP 
  462. Clears all pixels in a grob except those bounded by the 
  463. rectangular region defined by the pixel locations input on levels 
  464. one and two.  This is not a bang operation. 
  465.  
  466. Graphic, point, point  ->  Graphic 
  467.  
  468.  
  469.  
  470. GNEG 
  471. Inverts all pixel in the rectangular region defined by the pixel 
  472. locations input on levels one and two. 
  473.  
  474. NOTE: This is a bang operation 
  475.  
  476. Graphic, point, point  ->  Graphic 
  477.  
  478.  
  479.  
  480. GOR 
  481. Performs OR operation exactly like the built-in command GOR 
  482. except GOR is a bang operation. 
  483.  
  484. Graphic(target), point, Graphic  ->  Graphic 
  485.  
  486.  
  487.  
  488. ->GRB 
  489. The object on level two is converted into a grob.  The real 
  490. number on level one(1-3) defines the font size.  This command is 
  491. similar to the built-in command ->GROB with one exceptions. 
  492. Unlike ->GROB, ->GRB recognizes carriage returns. 
  493.  
  494. Any, Real(1-3)  ->  Graphic 
  495.  
  496.  
  497.  
  498. GREPL 
  499. Replaces a rectangular section in a grob exactly like the built- 
  500. in command REPL except REPL is a bang operation. 
  501. Graphic(target), point, Graphic  ->  Graphic 
  502.  
  503.  
  504.  
  505. GRID 
  506. Draws a grid on LCD. The pixel location input on level three 
  507. defines the top left corner.  The list or binary on level two 
  508. defines the pixel distance between horizontal and vertical grid 
  509. lines respectively.  Finally, the list or binary on level one 
  510. defines the number of horizontal and vertical boxes contained in 
  511. the grid. 
  512.  
  513. NOTE: An error will result if the bottom right corner of the grid 
  514. is off the screen. 
  515.  
  516. List, List, List  ->  Draws grid on LCD 
  517. Binary, Binary, Binary  ->  Draws grid on LCD 
  518.  
  519.  
  520.  
  521. GXOR 
  522. Performs XOR operation exactly like the built-in command GXOR 
  523. except GXOR is a bang operation. 
  524.  
  525. Graphic(target), point, Graphic  ->  Graphic 
  526.  
  527.  
  528.  
  529. HMRR 
  530. This command creates a horizontal mirror image of the grob on 
  531. level one. 
  532.  
  533. Graphic  ->  Graphic 
  534.  
  535.  
  536.  
  537. HOLD 
  538. Similar to the built-in command FREEZE, HOLD holds, or maintains, 
  539. the current display.  Unlike FREEZE, which updates the screen 
  540. when any key is pressed, the display is not updated until an 
  541. object is executed or the [ON] key is pressed.  The display is 
  542. maintained similar to the message screens in the TIME, STAT, and 
  543. PLOT menus.  The area to be held is defined by a real number 
  544. between 0 and 7 (see FREEZE in owner's manual). 
  545.  
  546. Real(0-7)  ->  Sets hold status 
  547.  
  548.  
  549.  
  550. HOLD? 
  551. Returns a real number(0-7) specifying the HOLD display status. 
  552. See HOLD. 
  553.  
  554. Hold display status  ->  Real(0-7) 
  555.  
  556.  
  557.  
  558. IMLBL 
  559. Converts any object into an inverse menu label grob (labels used 
  560. in solver menu). 
  561.  
  562. Any  ->  Graphic 
  563.  
  564.  
  565.  
  566. IORCL 
  567. Recalls IOPAR.  If IOPAR does not exist, it is created in the 
  568. home directory. 
  569.  
  570. -> List 
  571.  
  572.  
  573.  
  574. IRPT 
  575. IRPT is a must for programs that have a long run time.  It allows 
  576. you to interrupt a program, perform other calculations, and then 
  577. restore the original program environment. 
  578.  
  579. If the key buffer is empty no action occurs.  If however, a key 
  580. has been pressed, the program is interrupted by saving and 
  581. clearing the stack, saving the display, and halting the program. 
  582. You can inspect the state of the stack before the program was 
  583. halted with the library command IRPTSTK.  Entering KILL will 
  584. abort the program while entering CONT will restore the stack and 
  585. display, and continue the program.  When CONT is entered the 
  586. display will jump slightly.  This is completely normal. 
  587.  
  588. Keyboard  ->  Enters the Interrupt environment if a key is 
  589. pressed 
  590.  
  591.  
  592.  
  593. IRPTSTK 
  594. Returns the stack before a program was interrupted with the 
  595. library command IRPT.  The error message "Invalid Environment" is 
  596. displayed if IRPT is not active. 
  597.  
  598. NOTE: IRPTSTK does not clear the current stack.  It adds the 
  599. contents of the stack before an interrupt to the current stack. 
  600. If you want the current stack replaced with the interrupt stack 
  601. use the sequence CLEAR IRPTSTK. 
  602.  
  603. -> Stack before interrupt 
  604.  
  605.  
  606.  
  607. KEYRPT 
  608. As long as the key number input on level one remains pressed 
  609. KEYRPT repeatedly evaluates the object on level two.  Regardless 
  610. of whether the key number from level one is pressed, the object 
  611. on level two is evaluated at least once.  The key number must be 
  612. in the standard HP key format(rowcol,shift). 
  613.  
  614. Global, Real  -> 
  615. Local, Real  -> 
  616. Program, Real  -> 
  617.  
  618.  
  619.  
  620. KEY-> 
  621. Converts 48 key number (rowcol.shift) into consecutive key number 
  622. and shift number.  See GETKEY for explanation on consecutive key 
  623. numbers. 
  624.  
  625. Real  ->  Real, Real 
  626.  
  627.  
  628.  
  629. àKEY 
  630. Returns the alpha string assigned to the HP key 
  631. number(rowcol.shift) on level one.  The strings returned for 
  632. shift numbers .1 through .3 are the same as those returned for .4 
  633. through .6. 
  634.  
  635. Real  ->  String 
  636.  
  637.  
  638.  
  639. ->KEY 
  640. Converts a consecutive key number and shift number into a 
  641. standard HP key code.  See GETKEY for an explanation on 
  642. consecutive key numbers. 
  643.  
  644. Real, Real  ->  Real 
  645.  
  646.  
  647.  
  648. LBOX 
  649. Draws a box on LCD.  The pixel locations input on levels one and 
  650. two define opposite corners. 
  651.  
  652. point, point  -> 
  653.  
  654.  
  655.  
  656. LCDGROB 
  657. Returns the actual grob(not a copy) defining the LCD(stack) 
  658. display.  Its value continually changes every time the stack 
  659. display changes.  To see how this works, key in LCDGROB DUP and 
  660. enter the graphic environment ([orange shift] [left arrow]).  Now 
  661. place the grob from level one on PICT ([blue shift] [up arrow] 
  662. [blue shift] [left arrow] NXT NXT REPL ).  The last stack display 
  663. is placed on the screen.  Now exit the graphic environment (ON) 
  664. so the stack display can be updated.  Finally enter the graphic 
  665. environment again and place the grob from level one on PICT as 
  666. before.  This time a different value is placed on the screen. 
  667. When used as a target grob by a bang command, the LCD grob is 
  668. directly altered. 
  669.  
  670. -> Graphic 
  671.  
  672.  
  673.  
  674. ->LCDR 
  675. Replaced the LCD(stack) display with the graphic input on level 
  676. one like the built-in command ->LCD except for several 
  677. differences.  ->LCDR does not clear the display first, and grobs 
  678. smaller than 131 pixel wide and 56 pixels tall are placed on top 
  679. of the existing display. 
  680.  
  681. Graphic  -> 
  682.  
  683.  
  684.  
  685. LCMD 
  686. Returns the last command line as a string.  If last command is 
  687. turned off an empty string is returned. 
  688.  
  689. -> String 
  690.  
  691.  
  692.  
  693. LDIM56 
  694. Redimensions the LCD(stack) grob to 56 pixel in height.  This is 
  695. its default size. 
  696.  
  697. LDIM64 
  698. Redimensions the LCD(stack) grob to 64 pixel in height.  This 
  699. allows you to display graphics in the menu area(the menu display 
  700. must be turned off using the library command MOFF). 
  701.  
  702. NOTE: You should reset the display with LDIM56 when exiting a 
  703. program. 
  704.  
  705.  
  706.  
  707. LELINE 
  708. The line connecting the two pixel locations input on levels one 
  709. and two are erased on the LCD(stack) grob. 
  710.  
  711. point, point  -> 
  712.  
  713.  
  714.  
  715. LINEQ 
  716. Returns the equation of the line passing through the two points 
  717. defined by the complex numbers (pixel locations) input on levels 
  718. one and two. 
  719.  
  720. Complex, Complex  ->  Algebraic 
  721.  
  722.  
  723.  
  724. LLINE 
  725. Draws a line on the LCD(stack) grob connecting the pixel 
  726. locations input on levels one and two.  The pixel locations 
  727. cannot be outside the LCD grob. 
  728.  
  729. point, point  -> 
  730.  
  731.  
  732.  
  733. LSTKEY 
  734. Returns the standard HP key number of the last key pressed in the 
  735. DEFKEYS environment and the last menu row (see DEFKEYS).  The 
  736. error "Invalid Environment" will occur if the DEFKEYS environment 
  737. is not active. 
  738.  
  739. -> Real, Real 
  740.  
  741.  
  742.  
  743. LSTSTK 
  744. Restores last stack as if [orange shift] [2] had been pressed. 
  745.  
  746.  
  747.  
  748. LSTSTK? 
  749. Returns 1 if last stack is active, otherwise returns 0. 
  750.  
  751. Last stack flag  ->  Real(1 or 0) 
  752.  
  753.  
  754.  
  755. LTLINE 
  756. Toggles the pixels on the LCD(stack) grob that lie on the line 
  757. connecting the pixel locations input on levels one and two.  The 
  758. pixel locations cannot be outside the LCD grob. 
  759.  
  760. point, point -> 
  761.  
  762. MDISP 
  763. Displays the object from level one on the menu grob using the 
  764. small font size. 
  765.  
  766. Any  ->  Object displayed in menu area 
  767.  
  768.  
  769.  
  770. MKYñ 
  771. Toggles a menu label from white on black to black on white and 
  772. back to white on black.  The real number 1 though 6 defines the 
  773. menu label to be toggled.  Any number less than 1 will toggle the 
  774. first menu label.  Likewise, any number greater than 6 will 
  775. toggle the last label. 
  776.  
  777. Real(1-6)  ->  Menu label is toggled 
  778.  
  779.  
  780.  
  781. MLBL 
  782. Converts the object on level one into a normal menu label grob. 
  783.  
  784. Any  ->  Graphic 
  785.  
  786.  
  787.  
  788. MNUGROB 
  789. Returns the actual grob(not a copy) defining the menu display. 
  790. Its value continually changes every time the menu display 
  791. changes.  To see how this works, key in MNUGROB DUP and enter the 
  792. graphic environment ([orange shift] [left arrow]).  Now place the 
  793. grob from level one on PICT ([blue shift] [up arrow] [blue shift] 
  794. [left arrow] NXT NXT REPL ).  The last menu display is placed on 
  795. the screen.  Now exit the graphic environment (ON) and copy the 
  796. current menu display to temporary memory (NEWOB).  Finally, enter 
  797. the graphic environment again and place the grob from level one 
  798. on PICT as before.  This time a different value is placed on the 
  799. screen.  When used as a target grob by a bang command, the menu 
  800. grob is directly altered. 
  801.  
  802. -> Graphic 
  803.  
  804.  
  805.  
  806. MNUROW 
  807. Sets menu row.  The real number on level one specifies the new 
  808. row.  1 sets the next row, 2 sets the previous row, and 3 sets 
  809. the first row. 
  810.  
  811.  
  812. REAL(-1,0 or 1)  ->  Changes current menu row. 
  813.  
  814.  
  815.  
  816. MOFF 
  817. Removes the menu display from the screen and redimensions LCD to 
  818. 131 by 64.  See the section titled DISPLAY GROBS 
  819.  
  820.  
  821.  
  822. MON 
  823. Displays the menu grob on the lower 8 pixels of the screen. 
  824. MON? 
  825. Returns 0 if the menu display is off.  Otherwise, 1 is returned 
  826.  
  827. Menu display(off or on)  ->  Real(0 or 1) 
  828.  
  829.  
  830.  
  831. MTWRTR 
  832. Edits a matrix using the matrix writer application.  If [ON] is 
  833. used to exit the application the original matrix is returned 
  834. along with the real number 0.  If [ENTER] is used to exit, the 
  835. edited matrix is returned with the real number 1. 
  836.  
  837. Array(1)  ->  Array(1), 0 
  838. Array(1)  ->  Array(2), 1 
  839.  
  840.  
  841.  
  842. MUPDT 
  843. Updates the menu display. 
  844.  
  845.  
  846.  
  847. NEWEQ 
  848. Programmable NEW command from SOLVE menu. 
  849.  
  850.  
  851.  
  852. NEWä 
  853. Programmable NEW command from STAT menu. 
  854.  
  855.  
  856.  
  857. OMLBL 
  858. Converts object on level one into an oval menu label grob.  This 
  859. is a new style menu label (see SMENU). 
  860.  
  861. Any  ->  Graphic 
  862.  
  863.  
  864.  
  865. PELINE 
  866. The line connecting the two pixel locations input on levels one 
  867. and two are erased on PICT. 
  868.  
  869. point, point  -> 
  870.  
  871.  
  872.  
  873. PICT? 
  874. Returns 1 is PICT is currently being displayed.  Otherwise, LCD 
  875. is displyed and 0 is returned.  PICT displayed when a graph is 
  876. drawn or the built-in command PVIEW is entered.  LCD is the 
  877. default display.  It can be displayed within a program using the 
  878. built-in command TEXT. 
  879.  
  880.     ->  Real 
  881.  
  882.  
  883.  
  884. PICTGROB 
  885. Returns the actual grob(not a copy) defining PICT, the graphic 
  886. display.  Its value continually changes every time the stack 
  887. display changes.  To see how this works, purge PICT and recall it 
  888. to the stack by entering PICT PURGE PICTGROB.  Graphic 0 x 0 
  889. should be displayed in level one.  Next redimension PICT by 
  890. entering #131d #64d PDIM.  Graphic 132 x 64 should be displayed 
  891. on level one now. 
  892.  
  893. When used as a target grob by a bang command, PICT is directly 
  894. altered. 
  895.  
  896. -> Graphic 
  897.  
  898.  
  899.  
  900. PPARCL 
  901. Recalls PPAR.  If it does not exist it is created in the current 
  902. directory. 
  903.  
  904. -> List 
  905.  
  906.  
  907.  
  908. äPRCL 
  909. Returns the STAT parameter list.  If äPAR does not exist in the 
  910. current directory, it is created. 
  911.  
  912. -> List 
  913.  
  914.  
  915.  
  916. PRESET 
  917. Resets PICT and PPAR to their default values. 
  918.  
  919.  
  920.  
  921. PRTRCL 
  922. Returns the Print parameter list.  If PRTPAR does not exist in 
  923. the home directory it is created. 
  924.  
  925. PX* 
  926. If two pixel lists are on levels one and two, their corresponding 
  927. components are multiplied.  If levels one and two contain a pixel 
  928. list and a real or binary number, each component of the pixel 
  929. list is multiplied by the number. 
  930.  
  931. List, Real  ->  List 
  932. List, Binary  ->  List 
  933. List, List  ->  List 
  934. Real, List  ->  List 
  935. Binary, List  ->  List 
  936.  
  937.  
  938.  
  939. PX+ 
  940. Adds corresponding components of two pixel lists. 
  941.  
  942. List, List  ->  List 
  943.  
  944.  
  945.  
  946. PX- 
  947. Subtracts corresponding components of two pixel lists. 
  948.  
  949. List, List  ->  List 
  950.  
  951.  
  952.  
  953. PX/ 
  954. If two pixel lists are on levels one and two, each component on 
  955. level two is divided by the corresponding component on level one. 
  956. If level two contains a pixel list and level one contains a real 
  957. or binary number, each component of from level two is divided by 
  958. the number on level one.  Likewise, if a real or binary number is 
  959. on level two and a pixel list is on level one, a new pixel list 
  960. whose components are calculated by dividing the number from level 
  961. two by the corresponding components on level one is returned. 
  962.  
  963. List, Real  ->  List 
  964. List, Binary  ->  List 
  965. List, List  ->  List 
  966. Real, List  ->  List 
  967. Binary, List  ->  List 
  968.  
  969.  
  970.  
  971. PX? 
  972. Return 1 if the pixel location input on level one on.  Otherwise. 
  973. 0 is returned. 
  974.  
  975. Graphic, point  ->  Real(1 or 0) 
  976.  
  977.  
  978.  
  979. PXOFF 
  980. Turns off one pixel in the grob from level two using the pixel 
  981. location input on level one. NOTE: This is a bang operation 
  982.  
  983. Graphic, point  ->  Graphic 
  984.  
  985.  
  986.  
  987. PXON 
  988. Turns on one pixel in the grob from level two using the pixel 
  989. location input on level one.  NOTE: This is a bang operation 
  990.  
  991. Graphic, point  ->  Graphic 
  992.  
  993.  
  994.  
  995. PX->B 
  996. Converts a pixel location from a list type to a binary integer 
  997. type. 
  998.  
  999. List  ->  Binary 
  1000.  
  1001.  
  1002.  
  1003. PX->R 
  1004. Converts a pixel list into two real numbers. 
  1005.  
  1006. List  ->  Real, Real 
  1007.  
  1008.  
  1009.  
  1010. R->PX 
  1011. Converts two real numbers into a pixel list. 
  1012.  
  1013. Real, Real  ->  List 
  1014.  
  1015.  
  1016.  
  1017. SMENU 
  1018. Creates a custom menu from a list much like the built-in command 
  1019. MENU with the following exceptions. 
  1020. If the object used to create a menu label is a global name, a 
  1021. standard label is created.  All other objects are converted to a 
  1022. string.  Next, the first character is striped and, if it matches 
  1023. one of the control characters listed below, a special menu label 
  1024. is created.  Otherwise, a standard label is used. 
  1025.  
  1026. "D" - Directory Label 
  1027. White letters on a black box with a bar on top. 
  1028.  
  1029. "I" - Inverse Label 
  1030. Black letters on a white background, inside a box.  The same 
  1031. label that are used in the solver menu. 
  1032.  
  1033. "O" - Oval Label 
  1034. White letters on a black oval. 
  1035.  
  1036. "C" - Circular Label 
  1037. Black letters on a white background, inside a rounded cornered 
  1038. box. 
  1039.  
  1040. "F" - Flag Indicator Label 
  1041. An integer between -64 and 64, excluding 0, must follow the 
  1042. character "F".  This integer specifies a flag.  The remaining 
  1043. portion of the string is used as the name for the label.  If the 
  1044. specified flag is set, a small white box will appear on the right 
  1045. side of the label.  As an example, "F-20PRG" will create a 
  1046. standard label with the name PRG.  If flag -20 is set, a box will 
  1047. appear after the name. 
  1048.  
  1049. Three predefined menu labels can be displayed by using special 
  1050. strings. 
  1051.  
  1052. "BLANK" - No menu box 
  1053.  
  1054. "BOX"   - White label in black box 
  1055.  
  1056. "GREY"  - Grey pattern box 
  1057.  
  1058. As an example of how SMENU works, try creating the following 
  1059. menu. 
  1060.  
  1061. { "BOX" "GREY" "BLANK" "DDIR" "OCRV" "ISOLV" { "F-56BPOFF" << -56 
  1062. FTGL >> } "CSEE" "ASTD" PRG1 } 
  1063.  
  1064.  
  1065. List  ->  Creates custom menu 
  1066.  
  1067.  
  1068.  
  1069.  STK 
  1070. Programmable interactive stack command. 
  1071.  
  1072.  
  1073.  
  1074. STKUPDT 
  1075. Updates the stack display. 
  1076.  
  1077.  
  1078.  
  1079. STSUPDT 
  1080. Updates the status display. 
  1081.  
  1082.  
  1083.  
  1084. UNHOLD 
  1085. Removes the HOLD and FREEZE display flags specified by the real 
  1086. number on level one.  See FREEZE in the owners manual and HOLD in 
  1087. this manual. 
  1088.  
  1089. Real  ->  Clears HOLD and FREEZE display status. 
  1090.  
  1091.  
  1092. YES? 
  1093. Create a custom menu with "YES" on the left and "NO" on the 
  1094. right.  Pressing "YES", "NO" or [ON] exits the routine.  If "YES" 
  1095. is pressed the real number 1 is returned to level one.  Likewise, 
  1096. pressing "NO" or [ON] returns 0 or -1 respectively. 
  1097.  
  1098. Menu prompt  -> Real(-1, 0 or 1) 
  1099.